/*******************************************************************************
  * 文件：Displayboard.h
  * 作者：djy
  * 版本：v1.0.0
  * 日期：2020.12.01
  * 说明：显示板驱动程序
*******************************************************************************/
#ifndef _DISPLAY_BOARD_H
#define _DISPLAY_BOARD_H

/* 头文件 *********************************************************************/
#include "Typedefine.h"
#include "Constant.h"
#include "Macro.h"

/* 宏定义 *********************************************************************/
// 将KeyByte1234组合成U32的按键值
#define u32KEY_VALUE_NONE				 ((U32) 0x00000000)	   // 无按键按下
#define u32KEY_VALUE_LEFT_TIMING         ((U32) 0x00800000)    // 左灶定时按键（KeyByte3.Bit7）
#define u32KEY_VALUE_MID_TIMING   		 ((U32) 0x00080000)    // 中灶定时按键（KeyByte3.Bit3）
#define u32KEY_VALUE_RIGHT_TIMING   	 ((U32) 0x00008000)    // 中灶定时按键（KeyByte2.Bit7）
#define u32KEY_VALUE_ADD                 ((U32) 0x80000000)    // 加键（KeyByte4.Bit7）
#define u32KEY_VALUE_SUB     			 ((U32) 0x08000000)    // 减键（KeyByte4.Bit3）
/* 类型定义 *******************************************************************/
typedef enum
{
    eLED_OFF  = 0,  // LED灭
    eLED_HALF = 1,  // LED半亮
    eLED_ON   = 2,  // LED全亮
    eLED_TOGGLE = 3,// LED翻转
}LEDCtrl_te;

typedef enum 
{
    eEN,    // 定时结束
    eE1,    // 点火失败
    eE2,    // 意外熄火
    eE4,    // 温度探头异常
    eE5,    // 副线圈故障
    eE6,    // 电压异常
    eTST,   // tst演示模式
}Symbol_te;//数码管符号显示类型

typedef enum
{
    eKEY_ADD_PRESS,
    eKEY_ADD_LONG_PRESS,
    eKEY_SUB_PRESS,
    eKEY_SUB_LONG_PRESS,
    eKEY_TIMING_PRESS,
}KeyCtrlType_te;// 按键类型

typedef struct
{
    Bool    bSEG1 : 1;
    Bool    bSEG2 : 1;
    Bool    bSEG3 : 1;
    Bool    bSEG4 : 1;
    Bool    bSEG5 : 1;
    Bool    bSEG6 : 1;
    Bool    bSEG7 : 1;
    Bool    bSEG8 : 1;                    
}DisplayRegEvenByte_ts;// GRIDx偶数字节

typedef union
{
    U8  u8DisplayRegEvenByte;
    DisplayRegEvenByte_ts sDisplayRegEvenByte;
}DisplayRegEvenByte_tu;

typedef struct
{
    Bool    bSEG9  : 1;
    Bool    bSEG10 : 1;
    Bool    bSEG11 : 1;
    Bool    bSEG12 : 1;
    Bool    bSEG13 : 1;
    Bool    bSEG14 : 1;
    Bool    bRes   : 2; // 预留bit     
}DisplayRegOddByte_ts;// GRIDx奇数字节

typedef union
{
    U8  u8DisplayRegOddByte;
    DisplayRegOddByte_ts sDisplayRegOddByte;
}DisplayRegOddByte_tu;

#pragma pack(1)
typedef struct
{
    DisplayRegEvenByte_tu uGrid1_OvenByte;
    DisplayRegOddByte_tu  uGrid1_OddByte;
    DisplayRegEvenByte_tu uGrid2_OvenByte;
    DisplayRegOddByte_tu  uGrid2_OddByte;
    DisplayRegEvenByte_tu uGrid3_OvenByte;
    DisplayRegOddByte_tu  uGrid3_OddByte;
    DisplayRegEvenByte_tu uGrid4_OvenByte;
    DisplayRegOddByte_tu  uGrid4_OddByte;
    DisplayRegEvenByte_tu uGrid5_OvenByte;
    DisplayRegOddByte_tu  uGrid5_OddByte;
    DisplayRegEvenByte_tu uGrid6_OvenByte;
    DisplayRegOddByte_tu  uGrid6_OddByte;
    DisplayRegEvenByte_tu uGrid7_OvenByte;
    DisplayRegOddByte_tu  uGrid7_OddByte;
    DisplayRegEvenByte_tu uGrid8_OvenByte;
    DisplayRegOddByte_tu  uGrid8_OddByte;
}DisplayRegData_ts;
#pragma pack()

/* 变量声明 *******************************************************************/
/* 函数声明 *******************************************************************/
// 数码管控制API
void SMG_AllOff(void); // 数码管熄灭
void SMG_ShowNum(U16 u16Data); // 数码管显示数字
void SMG_ShowSymbol(Symbol_te eSymbol); // 数码管显示符号
void SMG_IconTemper(Bool bState); // 温度ICON显示
void SMG_IconMinute(Bool bState); // 分钟ICON显示

// LED控制API
void LED_WifiCtrl(LEDCtrl_te eState); // wifi灯控制
void LED_SubCtrl(LEDCtrl_te eState);       // 减灯控制 
void LED_AddCtrl(LEDCtrl_te eState);       // 加灯控制 
void LED_LeftTimingCtrl(LEDCtrl_te eState); // 左定时灯控制
void LED_RightTimingCtrl(LEDCtrl_te eState); // 右定时灯控制
void LED_MidTimingCtrl(LEDCtrl_te eState); // 中定时灯控制

// 按键API
U32  Key_GetValue(void); // 获取按键值
void DisplayBoard_Init(void); // 显示板初始化

#endif /* _DISPLAY_BOARD_H */

/***************************** 文件结束 ***************************************/
